package com.gopay.common.cps.manager.order;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import com.gopay.common.base.manager.BaseManager;
import com.gopay.common.domain.cps.CpsGenMainOrder;

/**
 * 主订单查询 manager
 * 
 * @CpsGeneralMainOrderQueryManager.java
 * @author MA HUAN
 * @2013-1-22 上午10:34:55 www.gopay.com.cn Inc.All rights reserved.
 */
public interface CpsGeneralMainOrderQueryManager extends BaseManager<CpsGenMainOrder, Serializable> {

    public CpsGenMainOrder findByRelevanceGopayOrderIdAndGopayIntTxnCd(String relevanceGopayOrderId,String gopayIntTxnCd);


    public List<CpsGenMainOrder> findListByRelevanceGopayOrderIdAndGopayIntTxnCd(String relevanceGopayOrderId,String gopayIntTxnCd);

    public List<CpsGenMainOrder> findListByRelevanceGopayOrderIdAndGopayIntTxnCdRecvAcct(String relevanceGopayOrderId,String gopayIntTxnCd,String recvAcct);
    
    /**
     * 获取相同商户Id和相同商户订单号的订单列表
     * 
     * @param merId
     * @param merOrder
     * @return
     */
    public List<CpsGenMainOrder> findCpsGenMainOrderByMerIdAndMerOrder(String merId, String merOrder);

    /**
     * 根据交易时间和商户订单号获取订单<br>
     * 有多条则取第一条
     * 
     * @param merTxnTm
     * @param merOrderId
     * @return
     */
    public CpsGenMainOrder findCpsGenMainOrderByMerTxnTmAndMerOrderId(String merTxnTm, String merOrderId, String merId);

    /**
     * 获取原始订单
     * 
     * @param relevanceGopayOrderId
     * @return
     */
    public CpsGenMainOrder findByRelevanceGopayOrderId(String relevanceGopayOrderId);

    /**
     * 获取所有关联订单
     * @return
     */
    public List<CpsGenMainOrder> findAllByRelevanceGopayOrderId(String relevanceGopayOrderId);

    /**
     * 根据交易时间和商户订单号获取订单<br>
     * 有多条则取第一条
     * 
     * @param merTxnTm
     * @param merOrderId
     * @return
     */
    public CpsGenMainOrder findSuccCpsGenMainOrderByMerTxnTmAndMerOrderId(String merTxnTm, String merOrderId,
            String merId);

    /**
     * 获取订单列表
     * 
     * @param txnStaCd
     *            订单状态
     * @param pageIndex
     *            当期页数
     * @param pageSize
     *            每页记录数
     * @return
     */
    public List<CpsGenMainOrder> getMainOrders(int txnStaCd, int pageIndex, int pageSize);

    /**
     * 获取订单总数
     * 
     * @param txnStaCd
     *            订单状态
     * @return
     */
    public int getMainOrderCount(int txnStaCd);
    
    /**
     * 获取子订单
     * 
     * @param relevanceGopayOrderId
     * @return
     */
    public List<CpsGenMainOrder> getChildRelevanceGopayOrder(String orderId);
    
    /**
     * @Description 根据商户订单号，商户Id,交易类型查询一个主订单对象
     * @param merOrderId
     * @param merId
     * @param gopayIntTxnCd
     * @return 
     * @author b.zou
     */
    public CpsGenMainOrder findByMerOrderIdAndAndMerIdAndGopayIntTxnCd(String merOrderId,String merId,String gopayIntTxnCd);
    
    public CpsGenMainOrder findCpsGenMainOrderByOrderId(String merOrderId);

    /**
     * 获取指定交易类型、客户id、交易状态的交易个数（判断该商户是否成功发生过指定交易）
     * @return
     */
    public boolean findExistByIntTxnCdCustId(String tranType,String custId);

    /**
     * 根据原订单号查询是否发生过因为“银行卡异常”的正常退款失败或者因为“请核对账户信息”的退款转账失败
     * @param orderId 原订单号
     * @return 结果记录个数
     */
    public boolean findRefundExistByRelevanceId(String orderId);

    List<CpsGenMainOrder> findOrdersByRelevanceGopayOrderIdAndGopayIntTxnCd(String relevanceGopayOrderId,String gopayIntTxnCd);

}
